//
//  CDH_AcceleratorViewController.swift
//  Transducer
//
//  Created by chendehao on 16/8/20.
//  Copyright © 2016年 CDHao. All rights reserved.
//

import UIKit
import CoreMotion

class CDH_AcceleratorViewController: UIViewController {
    // 显示是在 push 还是 pull 状态检查加速器
    @IBOutlet weak var accelerometerModelLabel: UILabel!
    @IBOutlet weak var accelerometerButton: UIButton!
    
    @IBOutlet weak var accleratorLabel: UILabel!
    @IBOutlet weak var pushOrPullSwitch: UISwitch!
    
    // 运动管理者
    lazy var manager : CMMotionManager = CMMotionManager()

    
    override func viewDidLoad() {
        super.viewDidLoad()
        switchPushOrPull(pushOrPullSwitch)
    }
}
extension CDH_AcceleratorViewController {
    // 实时检查还是
    @IBAction func switchPushOrPull(sender: UISwitch) {
        switch sender.on {
        case true:
            // 显示是在 push 方式下使用加速器检查
            accelerometerModelLabel.text = "getAccelerometerPush"
            // 关闭加速器检查
            accelerometerButton.enabled = false
            // 采用 push 方式获取到加速器
            getAccelerometerPush()
            break
        case false:
            // 显示是在 pull 方式下使用加速器检查
            accelerometerModelLabel.text = "getAccelerometerPull"
            // 开启加速器检查
            accelerometerButton.enabled = true
            // 采用 pull 方式获取加速器检查
            getAccelerometerPull()
        }
    }
    // push 方式实时获取
    private func getAccelerometerPush() {
        // 1.判断加速计是否可用
        guard manager.accelerometerAvailable else {
            accleratorLabel.text = "加数器不用"
            return
        }
        // 2.设置加速计获取数据的时间间隔
        manager.accelerometerUpdateInterval = 0.5
        
        // 3.开始采集数据
        manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {[weak self] (data: CMAccelerometerData?, error: NSError?) in
            // 1.判断是否有错误
            if error != nil {
                self!.accleratorLabel.text = "error: \(error!)"
                return
            }
            
            // 2.获取加速级的数组
            guard let data = data else {
                return
            }
            self!.accleratorLabel.text = "x: \(data.acceleration.x), \ry: \(data.acceleration.y), \rz: \(data.acceleration.z)"
        }
    }
    // pull 方式需要时在使用加速器开始采集
    private func getAccelerometerPull() {
        // 1.判断加速器是否可用
        guard manager.accelerometerAvailable else {
            accleratorLabel.text = "加数器不用"
            return
        }
        // 2.开始采集数据
        manager.startAccelerometerUpdates()
    }
    // 点击按钮时才开启加速器检查
    @IBAction func accelerometerButtonTouchDown(sender: UIButton) {
        // 1.获取 data
        guard let data = manager.accelerometerData else {
            return
        }
        
        // 2.获取 x/y/z轴方向上的加速计的值
        accleratorLabel.text = "x: \(data.acceleration.x), \ry: \(data.acceleration.y), \rz: \(data.acceleration.z)"
    }
    
}

